1. Field of the Invention
The present invention relates, in general, to information systems, and, more particularly, to a database query system that is readily modifiable to adapt to new database hardware and software and applications.
2. Relevant Background
Although the field of information technology is characterized by rapid change, a significant problem leading to the obsolescence of information systems is the inability for the system itself to change. Traditional information systems are made from millions of lines of intricately interwoven code with data distributed throughout hundreds to thousands of interdependent tables. The conventional approach has been to closely couple a database management application to the database itself in an effort to minimize data access time. However, by closely binding the application to database, data restructuring requires that both the database and the application be modified. Also, interfaces to the database are application specific making it difficult to create inter-operable and extensible applications. Further, the application specific management software is difficult to reuse in diverse applications.
In conventional systems, small changes made to improve and even maintain functionality may require a large expenditure of programming resources to ensure that the system continues to function after the change. In many cases, the changes simply cannot be effectively made. In these cases, the entire system is scrapped in favor of a new system providing the desired functionality. These changes cost the user millions of dollars in actual cost, and significant expenses in lost time.
Fundamental components of an information system include one or more databases and a database management system (DBMS). A database broadly refers to a collection of data that is usually related. A database management system is used to access information from one or more databases. A database management system comprises one or more software implemented application(s) that interface between a user and a database stored in the memory and mass storage of a computer. The database management system typically includes functionality to perform searching (i.e., querying), sorting, updating, and combining data in the databases. In other words, the database management system accepts user input, generates database access requests, and returns data to the user.
Most database management systems support structure query language (SQL), a standard database language used in querying, updating, sorting, and managing relational databases. Most database management systems also support SQL extensions that provide additional functionality and user interfaces features. In a typical client/server implementation, a database is stored on a database server. The database server has a database management program running that accepts user information from a plurality of client nodes coupled to the server by a communication network. On the client side, the client computer runs a database management application capable of accessing and sending appropriate information to the database server.
Conventional applications, even object oriented applications, are deployed as procedural code. A typical application comprises a plurality of modules that each perform a specified set of tasks. These modules are linked and compiled to provide executable code that implements the application. At runtime, the executable code is loaded into machine memory and provides the applications features and behavior by executing the specified set of tasks in the machine. Program compilation occurs before the application is deployed such that the application cannot be fundamentally changed at runtime. Although some applications can be customized by the addition of macros or add-in applications and extensions, these additions are themselves implemented by procedural code and must be added before runtime.
As software complexity increases, verification of the functionality (i.e., the features and behavior of the software) has become problematic. When an application comprises thousands or millions of lines of code it becomes impracticable to test or simulate every possible failure mode. Until applications are actually used in their intended environment, many problems or limitations remain unknown. This increases the cost of maintenance and support for the application. In many mission critical information system applications (e.g., medical, financial, and security) it is vital that an application be implemented only after verification is complete. What is needed is a reliable system that can adapt to provide new functionality without the delays and cost imposed by software verification.
Because of the extensive use of computers to store and manipulate data over the last several decades, a tremendous wealth of information is available in digital form stored in a variety of database systems. With the advent of network technology, wide area networks, and internetworks (i.e., networks of networks) the information stored in these databases is physically accessible. However, because these database systems are largely incompatible, this stored information is not practicably accessible to many applications. This problem is expected to become more acute as new database systems come on line with improved functionality and performance. A need exists for a database query system that is designed to adapt to accommodate data from any source from legacy systems to the newest object-oriented databases.
Existing information systems comprise database server software running on top of an operating system. The database engine accepts user queries using a structured syntax such as structured query language (SQL). Natural language interpreters are used to convert natural language queries into syntactically correct query language statements. A query often comprised a long series of query language statements that were only useful when used in a particular combination. Most often, the queries were executed and then destroyed. Some systems allowed the entire complex query to be saved for re-execution. However, when the characteristics of the database changed, re-execution often failed thereby requiring regeneration of a suitable query. A need exists for a query save and retrieve system that handles changes in the underlying database structure.
One limitation of conventional database applications is that in order to perform upgrades and even minor modifications and maintenance, the entire system must be brought down (i.e., halted) in order to install and verify the changes. This results in down time that is unacceptable in many applications. This downtime is required when procedural code is changed as most computer systems do not support dynamic code changes while the code is stored in memory of the computer. A need exists for an information system that allows for dynamically applied maintenance updates and upgrades without bringing the system down for installation and maintenance.
Another limitation of existing database systems is in the relationship traversal mechanism. In any database the stored information comprises a web of interrelated data. In previous systems it is an application such as a database engine that instantiates the database objects then interprets and creates the relationships between them based upon a user-supplied query. In these systems, queries form a series of object traversals, and once the system traverses from one object to another it has been difficult to get back to the original again. For example, an SQL query that involves traversals returns objects of the type specified at the end of the relation. This only enables reference to attributes and relationships that are defined in the type of object that is returned. In prior systems it is not possible to refer to attributes or relationships that are defined in a parent object that was traversed. In particular, when an object type is sub-typed (which frequently occurs as an information system evolves) the sub-types will not include all of the attributes and relationship definitions contained in the parent object type. Although a query language such as SQL can be forced support such traversal and return features, the procedural syntax required makes such operations difficult for the user. Such operations are even more difficult for a natural language interpreter to manage.
As a particular example in a medical services support application, writing a Select statement to find a patient based on attributes of the patient's physician and spouse has been difficult. In such a query, the physician and spouse objects are only reached by traversing the patient object that holds the data identifying the physician and spouse objects. However, once traversed, the one-way nature of the procedural query language fails to recognize the relationship of the database objects (i.e., the physician and spouse objects) to the original patient object. This feature of prior information systems makes it difficult to backtrack to the patient object to obtain the desired data from the patient object. A need exists for a database query system in which not only data, but also relationships and attributes of the database objects are stored with the database objects.